package winapi
/*
  获取当前PC的主机名和IP地址
*/
import (
	"io"
	"net"
	"net/http"
	"os"
)

/*
当一个包被导入时，如果该包还导入了其它的包，那么会先将其它包导入进来，然后再对这些包中的包级常量和变量进行初始化，接着执行init函数（如果有的话），依次类推。等所有被导入的包都加载完毕了，就会开始对main包中的包级常量和变量进行初始化，然后执行main包中的init函数（如果存在的话），最后执行main函数
*/

//当包被加载时执行init函数，给对像的属性赋值
/*
func (*Winapi) Init() (err error) {
	t.HostName, err = t.getHostName()
	t.LanIP, err = t.getLanIP()
	//log.Println("取得主机名和IP地址，\n hostname:" + t.HostName + "\n lanip:" + t.LanIP)
	return err
}
*/

func (*Winapi) GetLanIP() (lanIP string, err error) {
	//取得电脑IP地址
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return "", err
		//os.Stderr.WriteString("Oops:" + err.Error())
		//os.Exit(1)
	}
	for _, a := range addrs {
		if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				//os.Stdout.WriteString(ipnet.IP.String() + "\n")
				lanIP = ipnet.IP.String()
			}
		}
	}
	//os.Exit(0)
	return lanIP, err
}

func (*Winapi) GetHostName() (hostName string, err error) {
	//取得电脑名称
	host, err := os.Hostname()
	if err != nil {
		//fmt.Printf("%s\n", err)
		return "", err
	} else {
		//fmt.Printf("计算机名称：%s\n", host)
		hostName = host
	}
	return hostName, err
}

func (*Winapi) GetWanIP() {
	//通过访问公网接口，取得电脑外网iP地址
	resp, err := http.Get("http://myexternalip.com/raw")
	if err != nil {
		os.Stderr.WriteString(err.Error())
		os.Stderr.WriteString("\n")
		//os.Exit(1)
	}
	defer resp.Body.Close()
	io.Copy(os.Stdout, resp.Body)
	//os.Exit(0)
}
